<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS测试</title>
</head>
<body>
    <!-- 测试JS -->

    <!-- <button onclick="alert('hello')">这是个按钮</button> -->

    <!-- <script>
        alert('hello world!');
    </script> -->

    <!-- <script src="a.js">
    </script> -->

    <!-- 打印日志：控制台显示 -->
    <!-- <script>
        console.log('hello啊');
    </script> -->

    <!-- 变量 -->
    <!-- <script>
        var name = '张三';

        let age = 18;

        console.log(name);
        console.log(age);

        let a = 10;
        console.log(typeof(a));

        a = 'hello';
        console.log(typeof(a));

    </script> -->

    <!-- <script>
        let a = 1;
        console.log(a/2);

        console.log('hello'-10);
    </script> -->

    <!-- <script>
        // 转义字符\
        let name = "My name is \"Xianmeng\"";
        console.log(name);

        // 或者单双引号避开使用
        let name2 = 'My name is "Xianmeng"';
        console.log(name2);

    </script> -->

    <!-- <script>
        let name = 'Zhangsan';
        console.log(name.length);

        let name2 = '张三';
        console.log(name2.length);
        
    </script> -->

    <!-- <script>
        // 字符串拼接
        let a = 2;
        let b = 'world';
        console.log(a+b);
    </script> -->

    <!-- <script>
        let a = true;
        console.log(typeof(a));
        console.log(a+10);
        console.log(a+'hello');
    </script> -->

    <!-- <script>
        let a = 'hello';
        console.log(a.lengtht +'10');

        let b = null;
        console.log(b);
    </script> -->

    <!-- 运算符测试 -->
    <!-- <script>
        // let a = 10;
        // let b = '10';
        // console.log(a!=b);
        // console.log(a!==b);

        let a = 10;
        b = a || 0;
    </script> -->

    <script>
        // 数组
        // 这样写可以创建出一个空的数组，但是一般不会这么写
        //let arr = new Array();
        
        // 更简单的写法：[]表示一个空的数组
        //let arr = [];

        // 创建数组的同时还可以指定初始值
        //let arr2 = [1,2,3,4,5,6];

        // 不同类型
        //let arr3 = [2,'hello',true,[]];

        // let arr5 = ['早睡','不秃头','爱追星'];
        // console.log(arr5[1]);
        // console.log(arr5.length);
        // console.log(arr5[3]);
        // arr5[2] = '爱学习';
        // console.log(arr5);
        // arr5[3] = '不躺平';
        // console.log(arr5);
        // arr5[5] = '敲代码';
        // console.log(arr5);
        // arr5[-1] = '追剧';
        // console.log(arr5);
        // console.log(arr5[-1]);

        // let arr5 = ['早睡','不秃头','爱追星'];
        // arr5[-1] = '早起';
        // arr5['hello'] = 'xianmemg';
        // console.log(arr5);
        // console.log(arr5['hello']);
        // console.log(arr5.hello);

        // let arr = [];
        // for(let i = 0; i<10; i++) {
        //     // push尾插
        //     arr.push(i);
        // }
        // console.log(arr);

        // // pop尾删
        // let del = arr.pop();
        // console.log(del);
        // console.log(arr);

        // let arr = [1,2,3,4,5,6];
        // // 想在2 3 之间插入一个hello
        // arr.splice(2,0,'hello');  // 3的下标是2
        // console.log(arr);

        // 函数
        // function hello() {
        //     console.log('hello');
        // }
        // // 函数只定义不调用是不会执行的，必须调用才执行
        // hello();

        // // 此时并不确定返回值类型，最后由x y 类型来决定
        // function add(x,y) {
        //     return x+y;
        // }
        // ret1= add('hello',28);
        // ret2 = add(false,8);
        // console.log(ret1);
        // console.log(ret2);


        // function add(a,b,c,d,e,f,g) {
        //     // 使用逻辑或进行操作！！
        //     a = a||0;
        //     b = b||0;
        //     c = c||0;
        //     d = d||0;
        //     e = e||0;
        //     f = f||0;
        //     g = g||0;

        //     return a+b+c+d+e+f+g;
        // }
        // let ret = 0;
        // ret = add(20,68);
        // console.log(ret);

        // ret = add(10,20,30,40,50,60,70,80);
        // console.log(ret);

        // function add() {
        //     let ret = 0;
        //     // arguments这个数组就包含了调用add方法的所有实参的值！！
        //     for(let i = 0; i < arguments.length; i++) {
        //         ret += arguments[i];
        //     }
        //     return ret;
        // }
        
        // let ret = 0;
        // ret = add(20,62);
        // console.log(ret);

        // ret = add(10,20,30,40,50,60,70,80);
        // console.log(ret);

        // 函数表达式
        // 先定义了add变量，然后给add变量进行赋值，赋的值是一个function，所以add的类型就是一个函数！
        // function其实就类似于定义了一个匿名函数（lambda表达式）
        // let add = function() {
        //     let ret = 0;
        //     for(let i = 0; i < arguments.length; i++) {
        //         ret += arguments[i];
        //     }
        //     return ret;
        // }
        // // 调用
        // let ret = 0;
        // ret = add(2,4,6);
        // console.log(ret);

        


    </script>

    <!-- <script>
        function test() {
            console.log(num);
        }
        let num = 100;
        // 调用后首先在该函数块中查找，找不到再往外（上级）查找
        // 注：num放在函数上下都行，但是一定要放在调用方法之前，之后就会报错！
        test();
    </script> -->

    <!-- <script>
        // 定义对象
        let student = {
            // 注意：是使用： 和 ，  ！！
            name: '小周',
            age: 20,
            gender: 'girl',
            tech: function() {
                console.log('敲代码！');
            },
            diff: function() {
                console.log('脑瓜子疼');
            }
        };

        // 进行打印
        console.log(student.name);
        // 调用方法（有括号！）：
        student.tech();
        student.diff();
    </script> -->


    <script>
        // JS写构造函数一般习惯上首字母大写，当然也称小写也是ok的！
        function Student(name,age,gender,techMsg,diffMsg) {
            // 构造函数会使用到this，不必写return语句
            // 这里的this就表示即将构造出来的对象。
            this.name = name;
            this.gender = gender;
            this.age = age;
            this.techMsg = function() {
                console.log(techMsg);
            };
            this.diffMsg = function() {
                console.log(diffMsg);
            };
        }

        // 创建对象
        let student1 = new Student('小周',20,'boy','敲代码','变秃了还没变强');
        let student2 = new Student('菜菜',22,'boy','爱唱歌','王者孤独');

        // 可以打印调用了
        console.log(student1.name);
        student2.diffMsg();

    </script>

</body>
</html>